<?php
/**
 * Controller_Driver
 *
 * Класс Controller_Driver отвечает за обработку данных водителя (для диспетчеров)
 */
class Controller_Driver extends Controller_Base {

	/**
	 * Выбор действия по URL
	 *
	 */
	public function action() {
		Service_Debug::setDebug();
		switch ($this->arrRequest[1]) {
			case '': case 'list': 
				if(SimpleAdministration::isAdmin()) $this->actionList();
				else throw new Exception_SiteError('', 404);
			  break;
			case 'add':
				if(SimpleAdministration::isAdmin()) $this->actionAdd();
				else throw new Exception_SiteError('', 404);
				break;
			default: 
				throw new Exception_SiteError('', 404);
		}
	}

	/**
	 * Выводит список зарегистрированных водителей
	 */
	public function actionList() {
		$objDriver = new Driver();
		$driversArray = $objDriver->find('all', array('select' => '`driver`.`ID_driver`,`driver`.`link_to_user`,`driver`.`first_name`,`driver`.`last_name`,`driver`.`middle_name`,`driver`.`created_at`,`driver`.`last_experience`,`driver`.`km_cost_from`,`driver`.`km_cost_to`', 'order' => '`driver`.`last_name` ASC'));
		Service_Debug::setDebug();
		$this->bodyAttrs = 'class="drivers-page"';
	  	$this->title = 'Водители';
		$driversArray = $objDriver->find('all', array('select' => '`driver`.`ID_driver`,`driver`.`link_to_user`,`driver`.`first_name`,`driver`.`last_name`,`driver`.`middle_name`,`driver`.`created_at`,`driver`.`last_experience`,`driver`.`km_cost_from`,`driver`.`km_cost_to`', 'order' => '`driver`.`last_name` ASC'));
		$resultArr = array();
		if(!empty($driversArray)) {
			// Массив айдишников водителей для которых нужно искать данные по машинам и расстояниям
			$arrDriversId = Service_ArrayConverter::getColumn($driversArray, 'ID_driver');
			
			$carsArray = $objDriver->find('all', array('select' => '`car`.`ID_driver`,`car`.`carrying_capacity`', 'joins' => 'INNER JOIN `car` USING(`ID_driver`)', 'conditions' => '`driver`.`ID_driver` IN(' . join(',', $arrDriversId) . ')'));
			$arrDistncesWishes = $objDriver->find('all', array('select' => '`distance_wish`.`ID_driver`,`distance_wish`.`km_from`,`distance_wish`.`km_to`', 'joins' => 'INNER JOIN `distance_wish` USING(`ID_driver`)', 'conditions' => '`driver`.`ID_driver` IN(' . join(',', $arrDriversId) . ')'));
			$arrPhones = $objDriver->find('all', array('select' => '`driver_phone`.`ID_driver`,`driver_phone`.`number`,`driver_phone`.`comment`', 'joins' => 'INNER JOIN `driver_phone` USING(`ID_driver`)', 'conditions' => '`driver`.`ID_driver` IN(' . join(',', $arrDriversId) . ')'));
			
			// Добавляем к массиву информацию о любимых расстояниях
			$resultArr = Service_ArrayConverter::combineArrays($driversArray, $arrDistncesWishes, 'ID_driver', 'distanceWishes');
			//Добавляем к массиву информацию об автомобилях водителя
			$resultArr = Service_ArrayConverter::combineArrays($resultArr, $carsArray, 'ID_driver', 'Cars');
			//Добавляем к массиву информацию о телефонах
			$resultArr = Service_ArrayConverter::combineArrays($resultArr, $arrPhones, 'ID_driver', 'phones');
		}
		
	 	$objViewDriver = new View_Driver();
	  	$this->showHeader();
	    $objViewDriver->showAdminList(&$resultArr);
		$this->showFooter();
	}
	
	/**
	 * Страница добавления водителей 
	 */
	public function actionAdd() {
		Service_Debug::setDebug();
	  	if (isset($_POST['Driver'])) {
			$objDriver = new Driver($_POST['Driver']);
			if ($objDriver->save()) User_Session::moveTo(W_ABSPATH . 'drivers', 'Водитель добален', 1);
		}
		else $objDriver = new Driver();
		
	  	$this->title = 'Добавление водителя';
	  	$objViewDriver = new View_Driver();

	  	$this->showHeader();
	    $objViewDriver->showEditForm($objDriver);
		$this->showFooter();
	}

}
?>